iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

昨天整理完程式後來寫api,這個api去呼叫lib/pdfWeather.py,先call CrawlerWeatherAPI(),先去跟天氣API要到資料,再傳到 PdfWeather()產生PDF,加在views.py

main/views.py,這邊多了get參數,locationsNameList,去選可以只顯示哪些行政區,是一個list,所以用request.GET.getlist()

def exportPdfWeather(request):
    locationNameList = request.GET.getlist("locationNameList", [])
    crawlerWeatherAPI = CrawlerWeatherAPI()
    dataDictList = crawlerWeatherAPI.getCrawlerData(locationNameList)
    pdfWeather = PdfWeather(dataDictList)
    pdfWeather.export()
    return JsonResponse({"msg": "success"})

main/urls.py,設定api/exportPdfWeather url

...
urlpatterns = [
    path('api/exportPdfWeather/', views.exportPdfWeather),
    ...
]

完成後 網頁輸入 http://localhost:8000/api/exportPdfWeather/ ,就會看到success 的字,預設會產生在lib/example.pdf ,就完成了。

讓瀏覽器可以去看到這個pdf,來改輸出pdf的位置,改到media/ 底下

在根目錄建立 media/資料夾
目錄結構

<projectName>/
----manage.py
----<projectName>/
--------__init__.py
--------settings.py
----main/
----venv/
----lib/
----media/

在<projectName>/settings.py加上

...
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'

<projectName>/urls.py
加上 staic 那段


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("main.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

main/views.py

def exportPdfWeather(request):
    locationNameList = request.GET.getlist("locationNameList", [])
    crawlerWeatherAPI = CrawlerWeatherAPI()
    dataDictList = crawlerWeatherAPI.getCrawlerData(locationNameList)
    fileName = os.path.join(MEDIA_ROOT, '未來鄉鎮天氣預報.pdf')
    pdfWeather = PdfWeather(dataDictList, fileName)
    pdfWeather.export()
    return JsonResponse({"msg": "success"})

網頁再輸入一次 http://localhost:8000/api/exportPdfWeather/ ,就會在media/看到 未來鄉鎮天氣預報.pdf,點開就會看到 剛剛產生的pdf檔案
在網頁輸入 http://127.0.0.1:8000/media/未來鄉鎮天氣預報.pdf ,就會看到pdf 的內容了。


參考資料:

如果有任何寫得不好的地方,請跟我說,謝謝。


上一篇
[Day 19] 重構 PDF 程式
下一篇
[Day 21] 前端
系列文
用 Python 玩 PDF,結合Django 變成一個網頁系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言